package main

import (
	"github.com/kataras/iris/v12"
	"mime/multipart"
	"strings"
)

const maxSize = 5 << 20 //5*1024MB
func main() {
	app := iris.New()
	app.Post("/upload", iris.LimitRequestBodySize(maxSize), func(ctx iris.Context) {
		//
		// UploadFormFiles
		// 上传任意数文件 ("multiple" 属性必须在form表单上存在）.
		//

		// 第二个参数可选，函数类型
		// 通常被用来修改上传文件名
		// 本示例展示如何使用它
		// 以当前用户的ip地址作为上传后文件名前缀
		ctx.UploadFormFiles("./uploads", beforeSave)
	})
	app.Listen(":8080")
}

func beforeSave(ctx iris.Context, fh *multipart.FileHeader) {
	ip := ctx.RemoteAddr()
	// 让文件名保持统一的格式
	// ip地址字符串的点与冒号全部替换为下划线
	ip = strings.ReplaceAll(ip, ".", "_")
	ip = strings.ReplaceAll(ip, ":", "_")
	// 你也可基于当前时间，用 time.Now, 作为文件的前缀或后缀，权当练习
	// 例如  unixTime :=  time.Now().Unix()
	// prefix 使用 $IP- 作为文件名前缀
	// 无需再多操作, 内部的文件上传器将使用这个名字
	// 将文件保存在当前 "./uploads" 文件内，（当然前提是这个文件夹已经存在）

	fh.Filename = ip + "-" + fh.Filename

}
